﻿using System;

namespace dk.Helper.Base
{
    public interface IAttack
    {
        /// <summary>
        /// Gets from.
        /// </summary>
        IVillage From { get; }

        /// <summary>
        /// Gets to.
        /// </summary>
        IVillage To { get; }

        /// <summary>
        /// Gets or sets the unit speed.
        /// </summary>
        /// <value>
        /// The unit speed.
        /// </value>
        int UnitSpeed { get; set; }

        /// <summary>
        /// Gets or sets the start.
        /// </summary>
        /// <value>
        /// The start.
        /// </value>
        DateTime Start { get; set; }

        /// <summary>
        /// Gets or sets the end.
        /// </summary>
        /// <value>
        /// The end.
        /// </value>
        DateTime End { get; set; }

        /// <summary>
        /// Gets the duration.
        /// </summary>
        TimeSpan Duration { get; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is fake.
        /// </summary>
        /// <value>
        ///   <c>true</c> if this instance is fake; otherwise, <c>false</c>.
        /// </value>
        bool IsFake { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is support.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is support; otherwise, <c>false</c>.
        /// </value>
        bool IsSupport { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is clearing.
        /// </summary>
        /// <value>
        /// 	<c>true</c> if this instance is clearing; otherwise, <c>false</c>.
        /// </value>
        bool IsClearing { get; set; }

        /// <summary>
        /// Gets or sets a value indicating whether this instance is noble.
        /// </summary>
        /// <value>
        ///   <c>true</c> if this instance is noble; otherwise, <c>false</c>.
        /// </value>
        bool IsNoble { get; set; }

        /// <summary>
        /// Gets or sets the description.
        /// </summary>
        /// <value>
        /// The description.
        /// </value>
        string Description { get; set; }

        /// <summary>
        /// Gets a value indicating whether this instance is old.
        /// </summary>
        /// <value>
        ///   <c>true</c> if this instance is old; otherwise, <c>false</c>.
        /// </value>
        bool IsOld { get; }

        /// <summary>
        /// Occurs when this instance is changed.
        /// </summary>
        event EventHandler Changed;
    }
}